home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / source / tsm23s.lha / Prefs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-10-08  |  16.5 KB  |  514 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. /*
  21.  *  Source machine generated by GadToolsBox V2.0
  22.  *  which is (c) Copyright 1991-1993 Jaba Development
  23.  *
  24.  *  GUI Designed by : M J P
  25.  */
  26.  
  27. // This has been edited!!
  28.  
  29. #include <exec/types.h>
  30. #include <intuition/intuition.h>
  31. #include <intuition/classes.h>
  32. #include <intuition/classusr.h>
  33. #include <intuition/imageclass.h>
  34. #include <intuition/gadgetclass.h>
  35. #include <libraries/gadtools.h>
  36. #include <graphics/displayinfo.h>
  37. #include <graphics/gfxbase.h>
  38. #include <clib/exec_protos.h>
  39. #include <clib/intuition_protos.h>
  40. #include <clib/gadtools_protos.h>
  41. #include <clib/graphics_protos.h>
  42. #include <clib/utility_protos.h>
  43. #include <string.h>
  44. //#include <pragmas/exec_pragmas.h>
  45. //#include <pragmas/intuition_pragmas.h>
  46. //#include <pragmas/gadtools_pragmas.h>
  47. //#include <pragmas/graphics_pragmas.h>
  48. //#include <pragmas/utility_pragmas.h>
  49.  
  50. #include <proto/exec.h>
  51. #include <proto/gadtools.h>
  52. #include <proto/intuition.h>
  53. #include <proto/diskfont.h>
  54. #include <proto/graphics.h>
  55. #include <proto/utility.h>
  56.  
  57. // V37 stuff
  58. #ifndef WA_NewLookMenus
  59. #define WA_NewLookMenus (WA_Dummy + 0x30)
  60. #endif
  61. #ifndef GTMN_NewLookMenus
  62. #define GTMN_NewLookMenus GT_TagBase+67
  63. #endif
  64. #ifndef STRINGA_ExitHelp
  65. #define STRINGA_ExitHelp (STRINGA_Dummy + 0x0013)
  66. #endif
  67. #ifndef WA_MenuHelp
  68. #define WA_MenuHelp (WA_Dummy + 0x2F)
  69. #endif    
  70.  
  71. #include "Prefs.h"
  72.  
  73. #define max(a,b) (((a)>(b))?(a):(b))
  74.  
  75. struct Screen         *Scr = NULL;
  76. UBYTE                 *PubScreenName = NULL;
  77. APTR                   VisualInfo = NULL;
  78. struct Window         *TSMorphPrefsWnd = NULL;
  79. struct Gadget         *TSMorphPrefsGList = NULL;
  80. struct Menu           *TSMorphPrefsMenus = NULL;
  81. struct IntuiMessage    TSMorphPrefsMsg;
  82. UWORD                  TSMorphPrefsZoom[4];
  83. struct Gadget         *TSMorphPrefsGadgets[26];
  84. UWORD                  TSMorphPrefsLeft = 0;
  85. UWORD                  TSMorphPrefsTop = 13;
  86. UWORD                  TSMorphPrefsWidth = 632;
  87. UWORD                  TSMorphPrefsHeight = 178;
  88. UBYTE                 *TSMorphPrefsWdt = (UBYTE *)"TSMorph Preferences";
  89. struct TextAttr       *Font, Attr;
  90. UWORD                  FontX, FontY;
  91. UWORD                  OffX, OffY;
  92. // gadget sizes
  93. struct Rectangle          Rect[26];
  94.  
  95. UBYTE *Mode0Labels[] = {
  96.     (UBYTE *)"Quick (0)",
  97.     (UBYTE *)"Quick Stationery (1)",
  98.     (UBYTE *)"Closest (2)",
  99.     (UBYTE *)"Closest Stationery (3)",
  100.     NULL };
  101.  
  102. UBYTE *SaveFormat0Labels[] = {
  103.     (UBYTE *)"ILBM24",
  104.     (UBYTE *)"OPAL24",
  105.     (UBYTE *)"OPAL24T",
  106.     (UBYTE *)"OPAL24F",
  107.     (UBYTE *)"OPAL24FT",
  108.     (UBYTE *)"JPEG",
  109.     (UBYTE *)"JPEGT",
  110.     (UBYTE *)"PPM",
  111.     (UBYTE *)"BW16",
  112.     (UBYTE *)"BW256",
  113.     (UBYTE *)"HAM6",
  114.     (UBYTE *)"HAM8",
  115.     (UBYTE *)"DCTV3",
  116.     (UBYTE *)"DCTV4",
  117.     NULL };
  118.  
  119. UBYTE *Zoom0Labels[] = {
  120.     (UBYTE *)"YES",
  121.     (UBYTE *)"NO",
  122.     (UBYTE *)"OFF",
  123.     NULL };
  124.  
  125. UBYTE *Palette0Labels[] = {
  126.     (UBYTE *)"YES",
  127.     (UBYTE *)"NO",
  128.     (UBYTE *)"OFF",
  129.     NULL };
  130.  
  131. UBYTE *OpenMode0Labels[] = {
  132.     (UBYTE *)"ALWAYS",
  133.     (UBYTE *)"IFILBM",
  134.     (UBYTE *)"IFCOLOURS",
  135.     (UBYTE *)"REMAP",
  136.     (UBYTE *)"OPAL",
  137.     NULL };
  138.  
  139. struct IntuiText TSMorphPrefsIText[] = {
  140.     1, 0, JAM1,332, 10, NULL, (UBYTE *)"Render", NULL,
  141.     1, 0, JAM1,553, 10, NULL, (UBYTE *)"TSMorph", NULL,
  142.     1, 0, JAM1,180, 88, NULL, (UBYTE *)"ARexx Script", NULL,
  143.     1, 0, JAM1,486, 88, NULL, (UBYTE *)"Public Screen", NULL,
  144.     1, 0, JAM1,480, 136, NULL, (UBYTE *)"Icon", NULL };
  145.  
  146. #define TSMorphPrefs_TNUM 5
  147.  
  148. struct NewMenu TSMorphPrefsNewMenu[] = {
  149.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  150.     NM_ITEM, (STRPTR)"Open...", (STRPTR)"O", 0, 0L, (APTR)TSMorphPrefsOpen,
  151.     NM_ITEM, (STRPTR)"Save As...", (STRPTR)"A", 0, 0L, (APTR)TSMorphPrefsSaveAs,
  152.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  153.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)TSMorphPrefsQuit,
  154.     NM_TITLE, (STRPTR)"Edit", NULL, 0, NULL, NULL,
  155.     NM_ITEM, (STRPTR)"Reset To Defaults", (STRPTR)"D", 0, 0L, (APTR)TSMorphPrefsResetToDefaults,
  156.     NM_ITEM, (STRPTR)"Last Saved", (STRPTR)"L", 0, 0L, (APTR)TSMorphPrefsLastSaved,
  157.     NM_ITEM, (STRPTR)"Restore", (STRPTR)"R", 0, 0L, (APTR)TSMorphPrefsRestore,
  158.     NM_TITLE, (STRPTR)"Settings", NULL, 0, NULL, NULL,
  159.     NM_ITEM, (STRPTR)"Create Icons?", (STRPTR)"I", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)TSMorphPrefsCreateIcons,
  160.     NM_END, NULL, NULL, 0, 0L, NULL };
  161.  
  162. UWORD TSMorphPrefsGTypes[] = {
  163.     SLIDER_KIND,
  164.     SLIDER_KIND,
  165.     SLIDER_KIND,
  166.     CYCLE_KIND,
  167.     CYCLE_KIND,
  168.     SLIDER_KIND,
  169.     CHECKBOX_KIND,
  170.     SLIDER_KIND,
  171.     CYCLE_KIND,
  172.     CYCLE_KIND,
  173.     CYCLE_KIND,
  174.     CHECKBOX_KIND,
  175.     CHECKBOX_KIND,
  176.     CHECKBOX_KIND,
  177.     CHECKBOX_KIND,
  178.     CHECKBOX_KIND,
  179.     BUTTON_KIND,
  180.     BUTTON_KIND,
  181.     BUTTON_KIND,
  182.     LISTVIEW_KIND,
  183.     STRING_KIND,
  184.     STRING_KIND,
  185.     STRING_KIND,
  186.     STRING_KIND,
  187.     STRING_KIND,
  188.     STRING_KIND
  189. };
  190.  
  191. struct NewGadget TSMorphPrefsNGad[] = {
  192.     59, 60, 143, 11, (UBYTE *)"Depth", NULL, GD_CustomDepth, PLACETEXT_LEFT, NULL, (APTR)CustomDepthClicked,
  193.     257, 15, 53, 11, (UBYTE *)"DX", NULL, GD_DX, PLACETEXT_LEFT, NULL, (APTR)DXClicked,
  194.     366, 15, 53, 11, (UBYTE *)"DY", NULL, GD_DY, PLACETEXT_LEFT, NULL, (APTR)DYClicked,
  195.     233, 30, 209, 11, NULL, NULL, GD_Mode, 0, NULL, (APTR)ModeClicked,
  196.     233, 45, 111, 11, NULL, NULL, GD_SaveFormat, 0, NULL, (APTR)SaveFormatClicked,
  197.     350, 45, 61, 11, NULL, NULL, GD_Quality, 0, NULL, (APTR)QualityClicked,
  198.     281, 60, 26, 11, (UBYTE *)"AntiA", NULL, GD_AntiAlias, PLACETEXT_LEFT, NULL, (APTR)AntiAliasClicked,
  199.     365, 60, 55, 11, (UBYTE *)"Depth", NULL, GD_Depth, PLACETEXT_LEFT, NULL, (APTR)DepthClicked,
  200.     525, 15, 99, 11, (UBYTE *)"Zoom", NULL, GD_Zoom, PLACETEXT_LEFT, NULL, (APTR)ZoomClicked,
  201.     525, 30, 99, 11, (UBYTE *)"Palette", NULL, GD_Palette, PLACETEXT_LEFT, NULL, (APTR)PaletteClicked,
  202.     525, 45, 99, 11, (UBYTE *)"Mode", NULL, GD_OpenMode, PLACETEXT_LEFT, NULL, (APTR)OpenModeClicked,
  203.     596, 60, 26, 11, (UBYTE *)"Help", NULL, GD_Help, PLACETEXT_LEFT, NULL, (APTR)HelpClicked,
  204.     525, 60, 26, 11, (UBYTE *)"Prefs", NULL, GD_KeepPrefs, PLACETEXT_LEFT, NULL, (APTR)KeepPrefsClicked,
  205.     413, 143, 26, 11, (UBYTE *)"Project", NULL, GD_Project, PLACETEXT_LEFT, NULL, (APTR)ProjectClicked,
  206.     505, 143, 26, 11, (UBYTE *)"Prefs", NULL, GD_Prefs, PLACETEXT_LEFT, NULL, (APTR)PrefsClicked,
  207.     597, 143, 26, 11, (UBYTE *)"Render", NULL, GD_Render, PLACETEXT_LEFT, NULL, (APTR)RenderClicked,
  208.     6, 163, 89, 12, (UBYTE *)"Save", NULL, GD_Save, PLACETEXT_IN, NULL, (APTR)SaveClicked,
  209.     287, 163, 89, 12, (UBYTE *)"Use", NULL, GD_Use, PLACETEXT_IN, NULL, (APTR)UseClicked,
  210.     539, 163, 89, 12, (UBYTE *)"Cancel", NULL, GD_Cancel, PLACETEXT_IN, NULL, (APTR)CancelClicked,
  211.     10, 17, 207, 43, (UBYTE *)"Custom Screen", NULL, GD_CustomMode, PLACETEXT_ABOVE, NULL, (APTR)CustomModeClicked,
  212.     74, 94, 250, 12, (UBYTE *)"Preview", NULL, GD_Preview, PLACETEXT_LEFT, NULL, (APTR)PreviewClicked,
  213.     74, 110, 250, 12, (UBYTE *)"Load", NULL, GD_Load, PLACETEXT_LEFT, NULL, (APTR)LoadClicked,
  214.     74, 126, 250, 12, (UBYTE *)"Pre", NULL, GD_Pre, PLACETEXT_LEFT, NULL, (APTR)PreClicked,
  215.     74, 142, 250, 12, (UBYTE *)"Post", NULL, GD_Post, PLACETEXT_LEFT, NULL, (APTR)PostClicked,
  216.     413, 94, 211, 12, (UBYTE *)"TSMorph", NULL, GD_MorphScreen, PLACETEXT_LEFT, NULL, (APTR)MorphScreenClicked,
  217.     413, 110, 211, 12, (UBYTE *)"Render", NULL, GD_RenderScreen, PLACETEXT_LEFT, NULL, (APTR)RenderScreenClicked
  218. };
  219.  
  220. ULONG TSMorphPrefsGTags[] = {
  221.     (GTSL_Min), 1, (GTSL_Max), 8, (GTSL_Level), 4, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  222.     (GTSL_Max), 32, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  223.     (GTSL_Max), 32, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  224.     (GTCY_Labels), (ULONG)&Mode0Labels[ 0 ], (TAG_DONE),
  225.     (GTCY_Labels), (ULONG)&SaveFormat0Labels[ 0 ], (TAG_DONE),
  226.     (GTSL_Max), 100, (GTSL_Level), 75, (GTSL_MaxLevelLen), 4, (GTSL_LevelFormat), (ULONG)"%3ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (GA_Disabled), TRUE, (TAG_DONE),
  227.     (TAG_DONE),
  228.     (GTSL_Max), 20, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  229.     (GTCY_Labels), (ULONG)&Zoom0Labels[ 0 ], (TAG_DONE),
  230.     (GTCY_Labels), (ULONG)&Palette0Labels[ 0 ], (TAG_DONE),
  231.     (GTCY_Labels), (ULONG)&OpenMode0Labels[ 0 ], (TAG_DONE),
  232.     (TAG_DONE),
  233.     (TAG_DONE),
  234.     (TAG_DONE),
  235.     (TAG_DONE),
  236.     (TAG_DONE),
  237.     (TAG_DONE),
  238.     (TAG_DONE),
  239.     (TAG_DONE),
  240.     (GTLV_ShowSelected), NULL, (GTLV_ScrollWidth),14,(TAG_DONE),
  241.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  242.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  243.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  244.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  245.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  246.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE)
  247. };
  248.  
  249. // Font sizing stuff has been edited to work a bit better
  250. // Window does (just!) fit on 640x200 screen in topaz 80
  251. static UWORD ComputeX( UWORD value )
  252. {
  253.     return(( UWORD )((( FontX * value ) + 4 ) / max(FontX,6) ));
  254. }
  255.  
  256. static UWORD ComputeY( UWORD value )
  257. {
  258.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  259. }
  260.  
  261. static void ComputeFont( UWORD width, UWORD height )
  262. {
  263.     Font = &Attr;
  264.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  265.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  266.     FontX = Scr->RastPort.Font->tf_XSize;
  267.  
  268.     OffX = Scr->WBorLeft;
  269.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  270.  
  271.     if ( width && height ) {
  272.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  273.             goto UseTopaz;
  274.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  275.             goto UseTopaz;
  276.     }
  277.     return;
  278.  
  279. UseTopaz:
  280.     Font->ta_Name = (STRPTR)"topaz.font";
  281.     FontX = FontY = Font->ta_YSize = 8;
  282. }
  283.  
  284. int SetupScreen( void )
  285. {
  286.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  287.         return( 1L );
  288.  
  289.     ComputeFont( 0, 0 );
  290.  
  291.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  292.         return( 2L );
  293.  
  294.     return( 0L );
  295. }
  296.  
  297. void CloseDownScreen( void )
  298. {
  299.     if ( VisualInfo ) {
  300.         FreeVisualInfo( VisualInfo );
  301.         VisualInfo = NULL;
  302.     }
  303.  
  304.     if ( Scr        ) {
  305.         UnlockPubScreen( NULL, Scr );
  306.         Scr = NULL;
  307.     }
  308. }
  309.  
  310. void TSMorphPrefsRender( void )
  311. {
  312.     struct IntuiText    it;
  313.     UWORD            cnt;
  314.  
  315.     ComputeFont( TSMorphPrefsWidth, TSMorphPrefsHeight );
  316.  
  317.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 335 ),
  318.                     OffY + ComputeY( 128 ),
  319.                     ComputeX( 293 ),
  320.                     ComputeY( 30 ),
  321.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  322.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 5 ),
  323.                     OffY + ComputeY( 3 ),
  324.                     ComputeX( 218 ),
  325.                     ComputeY( 72 ),
  326.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  327.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 455 ),
  328.                     OffY + ComputeY( 3 ),
  329.                     ComputeX( 173 ),
  330.                     ComputeY( 72 ),
  331.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  332.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 335 ),
  333.                     OffY + ComputeY( 79 ),
  334.                     ComputeX( 293 ),
  335.                     ComputeY( 47 ),
  336.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  337.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 227 ),
  338.                     OffY + ComputeY( 3 ),
  339.                     ComputeX( 223 ),
  340.                     ComputeY( 72 ),
  341.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  342.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 5 ),
  343.                     OffY + ComputeY( 79 ),
  344.                     ComputeX( 325 ),
  345.                     ComputeY( 79 ),
  346.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  347.  
  348.     for ( cnt = 0; cnt < TSMorphPrefs_TNUM; cnt++ ) {
  349.         CopyMem(( char * )&TSMorphPrefsIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  350.         it.ITextFont = Font;
  351.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  352.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  353.         PrintIText( TSMorphPrefsWnd->RPort, &it, 0, 0 );
  354.     }
  355. }
  356.  
  357. int HandleTSMorphPrefsIDCMP( void )
  358. {
  359.     struct IntuiMessage    *m;
  360.     struct MenuItem        *n;
  361.     int            (*func)();
  362.     BOOL            running = TRUE;
  363.  
  364.     while( m = GT_GetIMsg( TSMorphPrefsWnd->UserPort )) {
  365.  
  366.         CopyMem(( char * )m, ( char * )&TSMorphPrefsMsg, (long)sizeof( struct IntuiMessage ));
  367.  
  368.         GT_ReplyIMsg( m );
  369.  
  370.         switch ( TSMorphPrefsMsg.Class ) {
  371.  
  372.             case    IDCMP_REFRESHWINDOW:
  373.                 GT_BeginRefresh( TSMorphPrefsWnd );
  374.                 TSMorphPrefsRender();
  375.                 GT_EndRefresh( TSMorphPrefsWnd, TRUE );
  376.                 break;
  377.  
  378.             case    IDCMP_CLOSEWINDOW:
  379.                 running = TSMorphPrefsCloseWindow();
  380.                 break;
  381.  
  382.             case    IDCMP_MENUHELP:
  383.                 running = TSMorphPrefsMenuHelp();
  384.                 break;
  385.  
  386.             case    IDCMP_GADGETUP:
  387.             case    IDCMP_GADGETDOWN:
  388.                 func = ( void * )(( struct Gadget * )TSMorphPrefsMsg.IAddress )->UserData;
  389.                 running = func();
  390.                 break;
  391.  
  392.             case    IDCMP_MENUPICK:
  393.                 while( TSMorphPrefsMsg.Code != MENUNULL ) {
  394.                     n = ItemAddress( TSMorphPrefsMenus, TSMorphPrefsMsg.Code );
  395.                     func = (void *)(GTMENUITEM_USERDATA( n ));
  396.                     running = func();
  397.                     TSMorphPrefsMsg.Code = n->NextSelect;
  398.                 }
  399.                 break;
  400.  
  401.             case    IDCMP_RAWKEY:
  402.                 running = TSMorphPrefsRawKey();
  403.                 break;
  404.  
  405.              default:
  406.                 break;
  407.         }
  408.     }
  409.     return( (int) running );
  410. }
  411.  
  412. int OpenTSMorphPrefsWindow( void )
  413. {
  414.     struct NewGadget    ng;
  415.     struct Gadget    *g;
  416.     UWORD        lc, tc;
  417.     UWORD        wleft = TSMorphPrefsLeft, wtop = TSMorphPrefsTop, ww, wh;
  418.  
  419.     ComputeFont( TSMorphPrefsWidth, TSMorphPrefsHeight );
  420.  
  421.     ww = ComputeX( TSMorphPrefsWidth );
  422.     wh = ComputeY( TSMorphPrefsHeight );
  423.  
  424.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  425.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  426.  
  427.     if ( ! ( g = CreateContext( &TSMorphPrefsGList )))
  428.         return( 1L );
  429.  
  430.     for( lc = 0, tc = 0; lc < TSMorphPrefs_CNT; lc++ ) {
  431.  
  432.         CopyMem((char * )&TSMorphPrefsNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  433.  
  434.         ng.ng_VisualInfo = VisualInfo;
  435.         ng.ng_TextAttr   = Font;
  436.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  437.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  438.         ng.ng_Width      = ComputeX( ng.ng_Width );
  439.         ng.ng_Height     = ComputeY( ng.ng_Height);
  440.  
  441. // store size of gadget
  442.         Rect[lc].MinX = ng.ng_LeftEdge;
  443.         Rect[lc].MinY = ng.ng_TopEdge;
  444.         Rect[lc].MaxX = ng.ng_LeftEdge + ng.ng_Width;
  445.         Rect[lc].MaxY = ng.ng_TopEdge + ng.ng_Height;
  446.  
  447.         TSMorphPrefsGadgets[ lc ] = g = CreateGadgetA((ULONG)TSMorphPrefsGTypes[ lc ], g, &ng, ( struct TagItem * )&TSMorphPrefsGTags[ tc ] );
  448.  
  449.         while( TSMorphPrefsGTags[ tc ] ) tc += 2;
  450.         tc++;
  451.  
  452.         if ( NOT g )
  453.             return( 2L );
  454.     }
  455.  
  456.     if ( ! ( TSMorphPrefsMenus = CreateMenus( TSMorphPrefsNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  457.         return( 3L );
  458.  
  459.     LayoutMenus( TSMorphPrefsMenus, VisualInfo, GTMN_NewLookMenus,TRUE,TAG_DONE );
  460.  
  461.         TSMorphPrefsZoom[0] = TSMorphPrefsZoom[1] = 0;
  462.     if ( TSMorphPrefsWdt )
  463.         TSMorphPrefsZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)TSMorphPrefsWdt, strlen((char *)TSMorphPrefsWdt )) + 80;
  464.     else
  465.         TSMorphPrefsZoom[2]  = 80L;
  466.         TSMorphPrefsZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  467.  
  468.     if ( ! ( TSMorphPrefsWnd = OpenWindowTags( NULL,
  469.                 WA_Left,    wleft,
  470.                 WA_Top,        wtop,
  471.                 WA_Width,    ww + OffX + Scr->WBorRight,
  472.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  473.                 WA_IDCMP,    SLIDERIDCMP|CYCLEIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|LISTVIEWIDCMP|STRINGIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|
  474.                                 IDCMP_RAWKEY|IDCMP_MENUHELP,
  475.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
  476.                 WA_Gadgets,    TSMorphPrefsGList,
  477.                 WA_Title,    TSMorphPrefsWdt,
  478.                 WA_ScreenTitle,    "TSMorph ©1993 Topicsave Limited",
  479.                 WA_PubScreen,    Scr,
  480.                 WA_Zoom,    TSMorphPrefsZoom,
  481.                 WA_NewLookMenus, TRUE,
  482.                 WA_Activate,TRUE,
  483.                 WA_MenuHelp, TRUE,
  484.                 WA_AutoAdjust,TRUE,
  485.                 TAG_DONE )))
  486.     return( 4L );
  487.  
  488.     SetMenuStrip( TSMorphPrefsWnd, TSMorphPrefsMenus );
  489.     GT_RefreshWindow( TSMorphPrefsWnd, NULL );
  490.  
  491.     TSMorphPrefsRender();
  492.  
  493.     return( 0L );
  494. }
  495.  
  496. void CloseTSMorphPrefsWindow( void )
  497. {
  498.     if ( TSMorphPrefsMenus      ) {
  499.         ClearMenuStrip( TSMorphPrefsWnd );
  500.         FreeMenus( TSMorphPrefsMenus );
  501.         TSMorphPrefsMenus = NULL;    }
  502.  
  503.     if ( TSMorphPrefsWnd        ) {
  504.         CloseWindow( TSMorphPrefsWnd );
  505.         TSMorphPrefsWnd = NULL;
  506.     }
  507.  
  508.     if ( TSMorphPrefsGList      ) {
  509.         FreeGadgets( TSMorphPrefsGList );
  510.         TSMorphPrefsGList = NULL;
  511.     }
  512. }
  513.  
  514.